# include <iostream>
# include <string>
#include<jsoncpp/json/json.h>
#include<sstream>
#include<memory>

// class person
// {

// };
int main()
{   
    //反序列化
    std::string json_string = "{\"name\":\"John\",\"age\":25,\"isMale\":true}";

    //反序列化起手式，定义一个Json::Value对象
    Json::Value root;
    Json::Reader reader;
    bool ok=reader.parse(json_string,root);//将字符串解析为json对象
    //将json_string反序列化到root中
    (void )ok;

    //把序列化字符串，反序列化到了Json::Value对象中
    std::string name=root["name"].asString();
    int age=root["age"].asInt();
    bool isMale=root["isMale"].asBool();
    std::cout<<name<<std::endl;
    std::cout<<age<<std::endl;
    std::cout<<isMale<<std::endl;


    //序列化方案
    // Json::Value root;
    // root["name"] = "John";
    // root["age"] = 25;
    // root["isMale"] = true;

    // Json::StreamWriterBuilder sbuilder;//构建一个流写入器
    // std::unique_ptr<Json::StreamWriter> writer(sbuilder.newStreamWriter());//创建流写入器

    // std::stringstream ss;
    // writer->write(root,&ss);//将json对象写入stringstream，转换为ss类型
    // std::string s=ss.str();//将ss类型数据转换为字符串格式
    // std::cout<<s<<std::endl;
    // Json::FastWriter writer;//去掉换行，网络传送的数据量不就小了么，所以效率比较高点
    // Json::StyledWriter writer;//用\n给我们进行按行设置了，可读性比较好
    // std::string s=writer.write(root);//将上面的json对象转换为字符串
    // std::cout<<s<<std::endl;
    // std::string s=root.toStyledString();//将上面的风格转换为字符串
    // std::cout<<s<<std::endl;
    return 0;
}